<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <li>01</li>
    <li>02</li>
    <li>03</li>
    <li>04</li>
    <li>05</li>
    <li>06</li>
    <li>07</li>
    <li>08</li>
    <li>09</li>
    <li>10</li>
</body>
<script>
    function Cat(name, color) {
        this.name = name;
        this.color = color;
    }

    Cat.prototype.species = "猫";

    Cat.prototype.call = function () {
        console.log("喵喵");
    }
    Cat.prototype.skill = function () {
        console.log("捉老鼠");
    }
    Cat.prototype.say = function () {
        console.log(this.name, this.color);
    }

    // console.dir(Cat);



    // Tom -> Cat.prototype -> Object.prototype -> null

    var Tom = new Cat("Tom", "black");
    console.log(Tom);

    // toString()
    // valueOf()
    // isPrototypeOf()
    // hasOwnProperty()


    // instanceof   判断某个实例化对象 的原型链上 是否存在 某个构造函数的原型对象
    // console.log(Tom instanceof Cat); // true
    // console.log(Tom instanceof Object);  // true

    // var arr = new Array();
    // var p = new Promise(() => { })
    // var s = new Set();
    // console.log(arr instanceof Object); // true
    // console.log(p instanceof Object);   // true
    // console.log(s instanceof Object);   // true

    // isPrototypeOf()  某个构造函数的原型对象  是否存在于 某个实例化对象  的原型链上
    // console.log(Cat.prototype.isPrototypeOf(Tom));
    // console.log(Object.prototype.isPrototypeOf(Tom));

    // console.log(Array.prototype.isPrototypeOf(Tom)); //false

    // in   判断的一个对象(实例对象)的原型链上是否存在某个属性
    // console.log("name" in Tom);
    // console.log("species" in Tom);
    // console.log("toString" in Tom);

    // for (var key in Tom) {
    //     console.log(key);
    // }

    /* var liList = document.querySelectorAll("li");
    console.log(liList);

    for (var key in liList) {
        console.log(key);
    }

    var obj = liList.entries();
    console.log(obj);

    var result = obj.next();
    console.log(result);

    for (var [index, item] of obj) {
        console.log(index, item);
    } */

    // hasOwnProperty    在实例中是否包含该属性，不在原型中查找该属性
    // console.log(Tom.hasOwnProperty("name"));
    // console.log(Tom.hasOwnProperty("color"));
    // console.log(Tom.hasOwnProperty("species"));

    // propertyIsEnumerable 方法返回一个布尔值，表示指定的属性是否可枚举(遍历)。 (只在实例中查找)
    console.log(Tom.propertyIsEnumerable("name"));
    console.log(Tom.propertyIsEnumerable("color"));
    console.log(Tom.propertyIsEnumerable("species"));

</script>

</html>